package com.photography.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.photography.annotation.RequireRole;
import com.photography.common.Result;

import com.photography.entity.Category;
import com.photography.service.CategoryService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/category")
public class CategoryController {

    @Resource
    private CategoryService categoryService;

    /**
     * 新增产品分类
     *
     * @param category 分类信息
     * @return 结果
     */

    @RequireRole("manager")
    @PostMapping("/add")
    public Result addCategory(@RequestBody Category category) {
        return categoryService.addCategory(category);
    }

    /**
     * 删除分类
     *
     * @param id 分类id
     * @return 结果
     */
    @RequireRole("manager")
    @GetMapping("/delete/{id}")
    public Result deleteCategory(@PathVariable Integer id) {
        return categoryService.deleteCategory(id);
    }


    /**
     * 更新产品分类信息
     *
     * @param category 分类信息
     * @return 结果
     */
    @RequireRole("manager")
    @PutMapping("/update")
    public Result updateCategory(@RequestBody Category category) {
        return categoryService.updateCategory(category);
    }

    /**
     * 分页查询分类
     *
     * @param displayArea 显示区域（可选）
     * @param current     当前页码
     * @param size        每页大小
     * @param search 模糊搜索，支持分类名、分类标题、展示区域
     * @return 结果
     */
    @RequireRole("manager")
    @GetMapping("/list")
    public Result getCategoryPage(@RequestParam(required = false) String displayArea,
                                  @RequestParam(defaultValue = "1") Integer current,
                                  @RequestParam(defaultValue = "10") Integer size,
                                  @RequestParam(required = false) String search) {
        Page<Category> page = new Page<>(current, size);
        Page<Category> categoryPage = categoryService.getCategoryPage(page, displayArea,search);
        return Result.success(categoryPage, "查询成功");

    }

    /**
     * 模糊搜索
     *
     * @param current 当前页码
     * @param size    每页大小
     * @param keyword 搜索值
     * @return 结果
     */
    @RequireRole("manager")
    @GetMapping("/search")
    public Result search(@RequestParam(defaultValue = "1") Integer current,
                         @RequestParam(defaultValue = "10") Integer size,
                         @RequestParam(required = false) String keyword) {
        // 创建分页对象
        Page<Category> page = new Page<>(current, size);
        // 执行分页查询
        Page<Category> categoryPage = categoryService.search(page, keyword);
        return Result.success(categoryPage, "搜索成功");
    }

    /**
     * 查询所有分类及其下的产品
     *
     * @param displayArea 显示区域
     * @return 结果
     */
    @GetMapping("/withProducts")
    public Result findAllWithProducts(@RequestParam(required = false) String displayArea) {
        return categoryService.findAllWithProducts(displayArea);
    }

    /**
     * 查询指定分类及其下的产品
     *
     * @param id 分类ID
     * @return 分类及其产品
     */
    @GetMapping("/withProducts/{id}")
    public Result findCategoryWithProducts(@PathVariable Integer id) {
        return categoryService.findCategoryWithProducts(id);
    }
}
